#ifndef REFINING_OPERATOR_HPP
#define REFINING_OPERATOR_HPP

//------------------------------------------------------------------------------
// Fichier d'entête utilisés
//------------------------------------------------------------------------------
#include "Operator.hpp"
#include "BinaryImage.hpp"
#include "Gradiant.hpp"

namespace ImageAnalysis
{
//----------------------------------------------------------------------
// Cette classe permet d'affiner les contours dans une image binaire
// réalisée grâce au seuillage d'un gradiant. Cet affinage est réalisé
// grâce à la méthode des maxima locaux.
//----------------------------------------------------------------------
class RefiningOperator : public Operator
{
public:
	//----------------------------------------------------------------------
	// Structure
	//----------------------------------------------------------------------
	
	//----------------------------------------------------------------------
	// Constructeur
	//----------------------------------------------------------------------
	RefiningOperator( BinaryImage* originalImage, Gradiant* gradiant, BinaryImage* refinedImage );

	//----------------------------------------------------------------------
	// Destructeur
	//----------------------------------------------------------------------
	virtual ~RefiningOperator();

	//----------------------------------------------------------------------
	//
	//----------------------------------------------------------------------
	virtual void Process( );

private:
		//----------------------------------------------------------------------
		//
		//----------------------------------------------------------------------
		BinaryImage * currentOriginalImage;
		Gradiant*     currentGradiant;
		BinaryImage * currentRefinedImage;
		
				
        //----------------------------------------------------------------------
        // Constructeur par copie et oprérateur d'affectation en privée pour
        // interdire leur utilisation
        //----------------------------------------------------------------------
        RefiningOperator( const RefiningOperator& copy);
        RefiningOperator& operator=( const RefiningOperator& copy );
};

}

#endif //REFINING_OPERATOR_HPP
